package org.autumn.jmm;

public class Dcl {
    private static volatile Dcl dcl = null;
    private Dcl(){

    }
    // 查看byte code
    public static Dcl getDcl() {
        if (dcl == null){ // 这句代码
            synchronized (Dcl.class){
                if (dcl == null){
                    dcl = new Dcl();
                }
            }
        }
        return dcl;
    }

    /**
     * 这两句 字节码 重排会导致问题的发生
     * 21 invokespecial #4 <org/autumn/jmm/Dcl.<init> : ()V>
     * 24 putstatic #2 <org/autumn/jmm/Dcl.dcl
     * @param args
     */

    // 单例模式 双层检查锁
    public static void main(String[] args) {
        System.out.println(getDcl());
        System.out.println(getDcl());
    }
}
